/***********************************************************************************
 * 文件名： mcu.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		MCU 所有的驱动顶层文件，使用MCU驱动只用包含这一个文件即可。
 * 修改记录：
 * 	2023/4/19: 初版。 刘言。
***********************************************************************************/
#ifndef _MCU_H_
#define _MCU_H_

#ifdef __cplusplus
 extern "C" {
#endif

#ifndef USE_FULL_LL_DRIVER
    #define USE_FULL_LL_DRIVER
#endif
#ifndef USE_HAL_DRIVER
    #define USE_HAL_DRIVER
#endif

#include "HAL_USP_Config.h"
#include "..\ARM\polsys_armlib.h"


#define SYSTICK_VALUE   (HAL_RCC_GetHCLKFreq() / 1000000 * SYSTICK_PERIOD)

// /* -------  Start of section using anonymous unions and disabling warnings  ------- */
// #if   defined (__CC_ARM)
//   #pragma push
//   #pragma anon_unions
// #elif defined (__ICCARM__)
//   #pragma language=extended
// #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
//   #pragma clang diagnostic push
//   #pragma clang diagnostic ignored "-Wc11-extensions"
//   #pragma clang diagnostic ignored "-Wreserved-id-macro"
// #elif defined (__GNUC__)
//   /* anonymous unions are enabled by default */
// #elif defined (__TMS470__)
//   /* anonymous unions are enabled by default */
// #elif defined (__TASKING__)
//   #pragma warning 586
// #elif defined (__CSMC__)
//   /* anonymous unions are enabled by default */
// #else
//   #warning Not supported compiler type
// #endif


// 依据型号包含头文件

#ifndef HAL_USP_MCU_SERIES
    #error "未定义 MCU_SERIES"
#else
    #if (HAL_USP_MCU_SERIES == STM32F0XX)
        #include "stm32f0xx.h"
        #if (APP_BASE != 0)
            #error "STM32F0(Cortex-M0) not supported!"
        #endif
    #elif (HAL_USP_MCU_SERIES == PY32F002B)
        #include "py32f0xx.h"
        #ifdef USE_FULL_LL_DRIVER
            #include "py32f002b_ll_rcc.h"
            #include "py32f002b_ll_bus.h"
            #include "py32f002b_ll_system.h"
            #include "py32f002b_ll_cortex.h"
            #include "py32f002b_ll_utils.h"
            #include "py32f002b_ll_pwr.h"
            #include "py32f002b_ll_gpio.h"
            #include "py32f002b_ll_adc.h"
            #include "py32f002b_ll_comp.h"
            #include "py32f002b_ll_usart.h"
            #include "py32f002b_ll_spi.h"
            #include "py32f002b_ll_i2c.h"
            #include "py32f002b_ll_iwdg.h"
            #include "py32f002b_ll_crc.h"
            #include "py32f002b_ll_tim.h"
            #include "py32f002b_ll_lptim.h"
        #endif
    #elif (HAL_USP_MCU_SERIES == PY32F403)
        #include "py32f4xx.h"
    #endif
#endif

///////////////////////////// 参数计算


///////////////////////////// 提供的API

extern u8 Mcu_UidCode[12];

#define Mcu_GetUid()			Mcu_UidCode
#define Mcu_GetUidLength()		12

// void Nvic_Enable(IRQn_Type irqn);

void Error_Handler(void);

// 提供给 Polsys 调用
void Mcu_Init(void);
#define Mcu_TickStart() SysTick_Config(SYSTICK_VALUE) // 启动系统节拍计时器
// #define Mcu_EnableInt() __enable_irq()                // 开全局中断
// #define Mcu_DisableInt() __disable_irq()              // 关全局中断

///////////////////////////// 外设驱动

#include "mcu_power.h"
#include "mcu_delay.h"
#include "mcu_flash.h"
#include "mcu_uart.h"
#include "mcu_gpio.h"
#include "mcu_rtc.h"
#include "mcu_wdt.h"

#ifdef __cplusplus
}
#endif

#endif

